package util;

import java.io.File;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Init {
    static Map<String ,Object> c=new HashMap<>();


    /**
     * 扫描包路径下的所有class文件
     *
     * @param pkgName 包名
     * @param pkgPath 包对应的绝对地址
     * @param classes 保存包路径下class的集合
     */
    public static Map<String ,Object> findClassesByFile(String pkgName, String pkgPath, Set<Class<?>> classes) {
        File dir = new File(pkgPath);
        if (!dir.exists() || !dir.isDirectory()) {
            return null;
        }


        // 过滤获取目录，or class文件
        File[] dirfiles = dir.listFiles(pathname -> pathname.isDirectory() || pathname.getName().endsWith("class"));


        if (dirfiles == null || dirfiles.length == 0) {
            return null;
        }


        String className;
        Class clz;

        for (File f : dirfiles) {
            if (f.isDirectory()) {
                findClassesByFile(f.getName(),
                        pkgPath + "/" + f.getName(),
                        classes);
                continue;
            }


            // 获取类名，干掉 ".class" 后缀
            className = f.getName();
            className = className.substring(0, className.length() - 6);



            // 加载类
            clz = loadClass(pkgName + "." + className,pkgName);
            if (clz != null) {
                classes.add(clz);
            }
        }
        return c;
    }
    private static Class<?> loadClass(String fullClzName,String pkgName) {
        MyClassLoader m=new MyClassLoader();
        Class<?> aClass =m.findClass(fullClzName);
        try {
            //Object obj = aClass.newInstance();
           // Method method = aClass.getMethod("test");
           // method.invoke(obj);
            c.put("/"+pkgName,aClass);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}
